home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / ewl / ewl_callback.h < prev    next >
C/C++ Source or Header  |  2006-01-09  |  5KB  |  147 lines

  1. #ifndef __EWL_CALLBACK_H__
  2. #define __EWL_CALLBACK_H__
  3.  
  4. /**
  5.  * @file ewl_callback.h
  6.  * @defgroup Ewl_Callback Callback: The Callback Mechanisms
  7.  * Defines methods for creating and modifying callbacks on widgets
  8.  *
  9.  * @{
  10.  */
  11.  
  12. /**
  13.  * The callbacks used internally for tracking event actions.
  14.  */
  15. typedef struct Ewl_Callback Ewl_Callback;
  16.  
  17. /**
  18.  * @def EWL_CALLBACK(callback)
  19.  * Typecasts a pointer to an Ewl_Callback pointer.
  20.  */
  21. #define EWL_CALLBACK(callback) ((Ewl_Callback *) callback)
  22.  
  23. /**
  24.  * A shortcut for declaring functions that take a callback funciton pointer.
  25.  */
  26. typedef void    (*Ewl_Callback_Function) (Ewl_Widget * widget, void *ev_data,
  27.                       void *user_data);
  28.  
  29.  
  30. /**
  31.  * @def EWL_CALLBACK_FUNCTION(cb_func)
  32.  * Typecasts a pointer to an Ewl_Callback_Function pointer.
  33.  */
  34. #define EWL_CALLBACK_FUNCTION(cb_func) ((Ewl_Callback_Function) cb_func)
  35.  
  36. struct Ewl_Callback
  37. {
  38.     Ewl_Callback_Function func; /**< Function executed */
  39.     void           *user_data; /**< user specified data to pass to func */
  40.     int             references; /**< Reference counting */
  41.     int             id; /**< id number of this callback */
  42. };
  43.  
  44. /**
  45.  * @def EWL_CALLBACK_NOTIFY_MASK
  46.  * The value to binary AND with the callback pointer to check the notifiers.
  47.  */
  48. #define EWL_CALLBACK_NOTIFY_MASK (0x3)
  49.  
  50. /**
  51.  * @def EWL_CALLBACK_LIST(w, t)
  52.  * Retrives the callback list from a widget for a certain event type.
  53.  */
  54. #define EWL_CALLBACK_LIST(w, t) (w->callbacks[t].list)
  55.  
  56. /**
  57.  * @def EWL_CALLBACK_FLAGS(w, t)
  58.  * Retrives the callback flags from a widget for a certain event type.
  59.  */
  60. #define EWL_CALLBACK_FLAGS(w, t) (w->callbacks[t].mask)
  61.  
  62. /**
  63.  * @def EWL_CALLBACK_LEN(w, t)
  64.  * Retrives the length from a widget for a certain event type.
  65.  */
  66. #define EWL_CALLBACK_LEN(w, t) (w->callbacks[t].len)
  67.  
  68. /**
  69.  * @def EWL_CALLBACK_POS(w, t)
  70.  * Retrives the current callback position from a widget for an event type.
  71.  */
  72. #define EWL_CALLBACK_POS(w, t) w->callbacks[t].index
  73.  
  74. /**
  75.  * @def EWL_CALLBACK_GET(w, t, i)
  76.  * Retrives the callback struct at the given position
  77.  */
  78. #define EWL_CALLBACK_GET(w, t, i) \
  79.     ((w->callbacks[t].mask & EWL_CALLBACK_TYPE_DIRECT) ? w->callbacks[t].list : (w->callbacks[t].list ? w->callbacks[t].list[i] : NULL))
  80.  
  81. /**
  82.  * @def EWL_CALLBACK_FLAG_INTERCEPT(w, t)
  83.  * Sets the callback intercept flag from a widget for a certain event type.
  84.  */
  85. #define EWL_CALLBACK_FLAG_INTERCEPT(w, t) \
  86.         w->callbacks[t].mask |= EWL_CALLBACK_NOTIFY_INTERCEPT
  87.  
  88. /**
  89.  * @def EWL_CALLBACK_FLAG_NOINTERCEPT(w, t)
  90.  * Clears the callback intercept flag from a widget for a certain event type.
  91.  */
  92. #define EWL_CALLBACK_FLAG_NOINTERCEPT(w, t) \
  93.         w->callbacks[t].mask = w->callbacks[t].mask & ~EWL_CALLBACK_NOTIFY_INTERCEPT
  94.  
  95. /**
  96.  * @def EWL_CALLBACK_FLAG_NOTIFY(w, t)
  97.  * Sets the callback notify flag from a widget for a certain event type.
  98.  */
  99. #define EWL_CALLBACK_FLAG_NOTIFY(w, t) \
  100.         w->callbacks[t].mask |= EWL_CALLBACK_NOTIFY_NOTIFY
  101.  
  102. /**
  103.  * @def EWL_CALLBACK_SET_DIRECT(w, t)
  104.  * Sets the callback direct flag for a centain event type
  105.  */
  106. #define EWL_CALLBACK_SET_DIRECT(w, t) \
  107.         w->callbacks[t].mask |= EWL_CALLBACK_TYPE_DIRECT
  108.  
  109. /**
  110.  * @def EWL_CALLBACK_SET_NODIRECT(w, t)
  111.  * Clears the callback direct flag from a widget for a certain event type
  112.  */
  113. #define EWL_CALLBACK_SET_NODIRECT(w, t) \
  114.         w->callbacks[t].mask &= ~EWL_CALLBACK_TYPE_DIRECT
  115.  
  116.  
  117. void            ewl_callbacks_init(void);
  118. void            ewl_callbacks_shutdown(void);
  119. int             ewl_callback_append(Ewl_Widget * widget, Ewl_Callback_Type type,
  120.                     Ewl_Callback_Function func,
  121.                     void *user_data);
  122. int             ewl_callback_prepend(Ewl_Widget * widget,
  123.                      Ewl_Callback_Type type,
  124.                      Ewl_Callback_Function func,
  125.                      void *user_data);
  126. int             ewl_callback_insert_after(Ewl_Widget * w, Ewl_Callback_Type t,
  127.                       Ewl_Callback_Function f,
  128.                       void *user_data,
  129.                       Ewl_Callback_Function after,
  130.                       void *after_data);
  131. void            ewl_callback_clear(Ewl_Widget * widget);
  132. void            ewl_callback_call(Ewl_Widget * widget, Ewl_Callback_Type type);
  133. void            ewl_callback_call_with_event_data(Ewl_Widget * widget,
  134.                           Ewl_Callback_Type type,
  135.                           void *event_data);
  136. void            ewl_callback_del_type(Ewl_Widget * w, Ewl_Callback_Type t);
  137. void            ewl_callback_del(Ewl_Widget * w, Ewl_Callback_Type t,
  138.                  Ewl_Callback_Function f);
  139. void            ewl_callback_del_with_data(Ewl_Widget * w, Ewl_Callback_Type t,
  140.                  Ewl_Callback_Function f, void *data);
  141.  
  142. /**
  143.  * @}
  144.  */
  145.  
  146. #endif                /* __EWL_CALLBACK_H__ */
  147.